package no.nordicsemi.android.nrfmesh.auth.ui.register;

import android.os.Bundle;
import android.text.method.PasswordTransformationMethod;
import android.view.*;
import android.widget.*;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.constraintlayout.motion.widget.MotionLayout;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.ViewModelProvider;

import no.nordicsemi.android.nrfmesh.R;
import no.nordicsemi.android.nrfmesh.auth.ui.AuthActivity;
import no.nordicsemi.android.nrfmesh.auth.ui.AuthViewModel;

/** 先填 id/pd；下一步去填不同资料表 */
public class RegCredentialsFragment extends Fragment {
    private AuthViewModel vm;
    private EditText etId, etPd, etPd2;
    private TextView tvError;

    // 新增：可选的“记住/自动登录”勾选框（布局里若没添加这些 id，会为 null，代码会判空处理，不会崩）
    private CheckBox cbRememberOnDevice;   // id: cb_remember_reg
    private CheckBox cbAutoLoginAfterReg;  // id: cb_auto_login_reg

    @Nullable @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.fragment_reg_credentials, container, false);
        vm = new ViewModelProvider(requireActivity()).get(AuthViewModel.class);

        etId = v.findViewById(R.id.etId);
        etPd = v.findViewById(R.id.etPd);
        etPd2 = v.findViewById(R.id.etPd2);
        tvError = v.findViewById(R.id.tvError);

        // （可选）勾选框（如果你的 XML 里暂时没有这些控件，findViewById 会返回 null）
        cbRememberOnDevice = v.findViewById(R.id.cb_remember_reg);
        cbAutoLoginAfterReg = v.findViewById(R.id.cb_auto_login_reg);

        // 密码输入默认隐藏
        etPd.setTransformationMethod(PasswordTransformationMethod.getInstance());
        etPd2.setTransformationMethod(PasswordTransformationMethod.getInstance());

        // 若之前返回过本页，预填已输入的数据（提升体验）
        if (vm.id != null) etId.setText(vm.id);
        if (vm.pd != null) {
            etPd.setText(String.valueOf(vm.pd));
            etPd2.setText(String.valueOf(vm.pd));
        }
        if (cbRememberOnDevice != null && vm.rememberOnDevice != null) {
            cbRememberOnDevice.setChecked(vm.rememberOnDevice);
        }
        if (cbAutoLoginAfterReg != null && vm.autoLoginAfterReg != null) {
            cbAutoLoginAfterReg.setChecked(vm.autoLoginAfterReg);
        }

        Button btnNext = v.findViewById(R.id.btnNext);
        btnNext.setOnClickListener(view -> next());

        return v;
    }

    private void next() {
        tvError.setText(null);
        String id = etId.getText().toString().trim();
        String pd = etPd.getText().toString();
        String pd2 = etPd2.getText().toString();

        if (!id.matches("^[A-Za-z0-9_\\-]{4,32}$")) { tvError.setText("ID 由 4-32 位字母/数字/下划线/横线组成"); return; }
        if (pd.length() < 6) { tvError.setText("PD 至少 6 位"); return; }
        if (!pd.equals(pd2)) { tvError.setText("两次 PD 不一致"); return; }

        // 把凭据与用户偏好保存到 VM，以便后续资料页/提交注册时使用
        vm.id = id;
        vm.pd = pd.toCharArray();
        if (cbRememberOnDevice != null) vm.rememberOnDevice = cbRememberOnDevice.isChecked();
        if (cbAutoLoginAfterReg != null) vm.autoLoginAfterReg = cbAutoLoginAfterReg.isChecked();

        // —— 修改点：确保本机账号索引立即可见（不保存密码，仅建索引 + 刷新最近使用/自动登录标志）
        // 这样返回登录页时，顶部下拉可以立刻选择到刚填写的账号（即使未勾选“记住此账号到本机”也可显示）。
        boolean remember = cbRememberOnDevice != null && cbRememberOnDevice.isChecked();
        boolean autoLogin = cbAutoLoginAfterReg != null && cbAutoLoginAfterReg.isChecked();
        vm.onAuthSuccess(id, /*displayName*/ null, /*remember*/ remember, /*autoLogin*/ autoLogin);

        // 根据角色进入不同资料页（保持你的原有流程）
        if ("USER".equals(vm.role)) {
            ((AuthActivity) requireActivity()).goTo(new RegUserProfileFragment(), true);
        } else {
            ((AuthActivity) requireActivity()).goTo(new RegDoctorProfileFragment(), true);
        }
    }

    @Override
    public void onDestroyView() {
        super.onDestroyView();
        // 提升安全性：避免 EditText 持有明文，离开页面时清空显示（VM 中仍保留 char[]）
        if (etPd != null) etPd.setText("");
        if (etPd2 != null) etPd2.setText("");
    }
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        // 追加这一行
        applyHeroPaneEnhancements(view);
    }
    /** 右栏卡片入场动效 + 文案可选中（与登录页一致） */
    private void applyHeroPaneEnhancements(@NonNull View root) {
        MotionLayout ml = root.findViewById(R.id.heroPane);
        if (ml != null) {
            ml.post(ml::transitionToEnd);
        }
        int[] textIds = { R.id.tvDeviceIntro, R.id.tvBullets, R.id.tvDisclaimer };
        for (int id : textIds) {
            View v = root.findViewById(id);
            if (v instanceof TextView) {
                ((TextView) v).setTextIsSelectable(true);
            }
        }
    }
}
